//package ai.esc.speedy.admin.user.interfaces.controller.oauth2.client;
//
///**
// * @author Rubin
// * @version v1 2020/2/28 14:20
// */
//
//import org.apache.oltu.oauth2.client.OAuthClient;
//import org.apache.oltu.oauth2.client.URLConnectionClient;
//import org.apache.oltu.oauth2.client.request.OAuthClientRequest;
//import org.apache.oltu.oauth2.client.response.OAuthAccessTokenResponse;
//import org.apache.oltu.oauth2.common.OAuth;
//import org.apache.oltu.oauth2.common.exception.OAuthProblemException;
//import org.apache.oltu.oauth2.common.exception.OAuthSystemException;
//import org.apache.oltu.oauth2.common.message.types.GrantType;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import javax.servlet.http.HttpServletRequest;
//
///**
// * @author: wangsaichao
// * @date: 2018/5/27
// * @description: 访问令牌控制器
// *
// * 代码描述：
// * 1、首先通过如http://localhost:9090/accessToken，POST提交如下数据：client_id= c1ebe466-1cdc-4bd3-ab69-77c3561b9dee& client_secret= d8346ea2-6017-43ed-ad68-19c0f971738b&grant_type=authorization_code&code=828beda907066d058584f37bcfd597b6&redirect_uri=http://localhost:9080/oauth-client/oauth2-login访问。
// * 2、该控制器会验证client_id、client_secret、auth code的正确性，如果错误会返回相应的错误；
// * 3、如果验证通过会生成并返回相应的访问令牌access token。
// */
//@RestController
//@RequestMapping("/oauth-client")
//public class AccessTokenController {
//
//    @Value("${clientId}")
//    private String clientId;
//
//    @Value("${clientSecret}")
//    private String clientSecret;
//
//    @Value("${accessTokenUrl}")
//    private String accessTokenUrl;
//
//    @Value("${redirectUrl}")
//    private String redirectUrl;
//
//    @Value("${response_type}")
//    private String response_type;
//
//
//    //接受客户端返回的code，提交申请access token的请求
//    @RequestMapping("/callbackCode")
//    public Object toLogin(HttpServletRequest request)throws OAuthProblemException {
//
//        String  code = request.getParameter("code");
//
//        System.out.println("==> 服务端回调，获取的code："+code);
//
//        OAuthClient oAuthClient =new OAuthClient(new URLConnectionClient());
//
//        try {
//
//            OAuthClientRequest accessTokenRequest = OAuthClientRequest
//                    .tokenLocation(accessTokenUrl)
//                    .setGrantType(GrantType.AUTHORIZATION_CODE)
//                    .setClientId(clientId)
//                    .setClientSecret(clientSecret)
//                    .setCode(code)
//                    .setRedirectURI(redirectUrl)
//                    .buildQueryMessage();
//
//            //去服务端请求access token，并返回响应
//            OAuthAccessTokenResponse oAuthResponse =oAuthClient.accessToken(accessTokenRequest, OAuth.HttpMethod.POST);
//            //获取服务端返回过来的access token
//            String accessToken = oAuthResponse.getAccessToken();
//            //查看access token是否过期
//            Long expiresIn =oAuthResponse.getExpiresIn();
//            System.out.println("==> 客户端根据 code值 "+code +" 到服务端获取的access_token为："+accessToken+" 过期时间为："+expiresIn);
//
//            System.out.println("==> 拿到access_token然后重定向到 客户端 /oauth-client/getUserInfo服务,传过去accessToken");
//
//            return"redirect:/oauth-client/getUserInfo?accessToken="+accessToken;
//
//        } catch (OAuthSystemException e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//
//}